package com.zaimokuza.cn.util;

import com.zaimokuza.cn.entity.enums.CustomizeExceptionEnum;
import com.zaimokuza.cn.entity.user.SecurityUser;
import com.zaimokuza.cn.util.grace.GraceException;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * 用户信息相关工具类
 *
 * @author zaimokuza
 */
public class UserUtils {

    /**
     * 匿名用户
     */
    public final static String ANONYMOUS_USER = "anonymousUser";

    /**
     * 获取当前的用户信息
     *
     * @return 当前用户信息
     */
    public static SecurityUser getUser() {
        // 通过SpringSecurity获取当前用户信息
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        // 完善返回的用户信息
        if (principal != null && !principal.equals(ANONYMOUS_USER)) {
            return (SecurityUser) principal;
        }
        // 未获取有效用户信息时返回null
        return null;
    }

    /**
     * 获取当前的用户ID
     *
     * @return 用户ID
     */
    public static String getUserId() {
        // 通过SpringSecurity获取当前用户信息
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        // 如果当前未登录或者是匿名用户，提示用户登录
        if (principal == null || principal.equals(ANONYMOUS_USER)) {
            GraceException.display(CustomizeExceptionEnum.USER_NEED_LOGIN);
        }
        // 获取用户ID返回
        SecurityUser securityUser = (SecurityUser) principal;
        return securityUser.getId();
    }

}
